// 给你一个字符串 s，找到 s 中最长的回文子串。


//方法一：利用索引寻找，没有考虑连续重复的情况
// var longestPalindrome = function(s) {
//     // let str = Array.from(s);
//     let temp = 0;
//     let max = 0;
//     let cur = '';
//     for (let i = 0; i < s.length; i++) {
//         let str = s.substring(i + 1, s.length - 1);
//         if (str.indexOf(s[i]) != -1) {
//             let str2 = s.substring(i, str.indexOf(s[i]) + 1)
//             if (str2 == str2.split('').reverse().join('')) {
//                 temp = str2.length;
//             }
//             if (temp == Math.max(max, temp)) {
//                 cur = str2;
//             }
//         }
//     }
//     if (cur == '') { return s[0] }
//     return cur;
// };

//中心扩散法：从中间向两边检查
var longestPalindrome = function(s) {
    if (s.length < 2) {
        return s
    }
    let res = ''
    for (let i = 0; i < s.length; i++) {
        // 回文子串长度是奇数
        helper(i, i)
            // 回文子串长度是偶数
        helper(i, i + 1)
            //最终返回最大值，因此无需判断奇偶
    }

    function helper(m, n) {
        while (m >= 0 && n < s.length && s[m] == s[n]) {
            m--
            n++
        }
        // 注意此处m,n的值循环完后  是恰好不满足循环条件的时刻
        // 此时m到n的距离为n-m+1，但是mn两个边界不能取 所以应该取m+1到n-1的区间  长度是n-m-1
        if (n - m - 1 > res.length) {
            // slice也要取[m+1,n-1]这个区间 
            res = s.slice(m + 1, n)
        }
    }
    return res
};
let string = 'ac';
console.log(longestPalindrome(string));